package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.FundSetEntity;
import com.xbongbong.saas.enums.XbbRefTypeEnum;

import java.util.List;
import java.util.Map;

/**
 * @author zcp
 * @version v1.0
 * @since v1.0
 */
public interface FundSetModel extends IModel<FundSetEntity> {

    /**
     * 保存资金设置
     * @param entity
     * @return java.lang.Integer
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    Integer save(FundSetEntity entity) throws XbbException;

    /**
     * 根据参数查询
     * @param param 查询条件
     * @return 结果集
     */
    @Override
    List<FundSetEntity> findEntitys(Map<String, Object> param);

    /**
     * 获取公司某种业务的资金设置
     * @param corpid 公司id
     * @param refType 业务类型
     * @param type 来源规则
     * @return com.xbongbong.saas.domain.entity.FundSetEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    FundSetEntity getByRefType(String corpid, Integer refType, Integer type);

    /**
     * 获取公司某种业务的资金设置
     * @param corpid 公司id
     * @param refType 业务类型
     * @param type 来源规则
     * @param columns 要查询的字段，如“id,model_type,manage_type”
     * @return com.xbongbong.saas.domain.entity.FundSetEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    FundSetEntity getByRefType(String corpid, Integer refType, Integer type, String columns);

    /**
     * 获取当前启用的模式
     * @param corpid 公司id
     * @param xbbRefTypeEnum 业务类型，目前只有crm部分，传XbbRefTypeEnum.CRM，或XbbRefTypeEnum.JXC
     * @return java.lang.Integer @see com.xbongbong.pro.enums.fund.enums.ModelTypeEnum
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    Long getModelType(String corpid, XbbRefTypeEnum xbbRefTypeEnum);

    FundSetEntity getToRedis(String corpid, XbbRefTypeEnum xbbRefTypeEnum);

    void saveSetInfoToRedis(String corpid, FundSetEntity setEntity);
}
